// 支付宝签名验证脚本
require('dotenv').config();
const payment = require('./utils/payment');

console.log('🔍 开始验证支付宝签名配置...\n');

// 检查配置
console.log('1️⃣ 检查环境变量配置:');
console.log('   ALIPAY_APPID:', process.env.ALIPAY_APPID || '❌ 未配置');
console.log('   ALIPAY_PRIVATE_KEY:', process.env.ALIPAY_PRIVATE_KEY ? '✅ 已配置' : '❌ 未配置');
console.log('   ALIPAY_PUBLIC_KEY:', process.env.ALIPAY_PUBLIC_KEY ? '✅ 已配置' : '❌ 未配置');
console.log('   ALIPAY_SANDBOX:', process.env.ALIPAY_SANDBOX);
console.log('   ALIPAY_GATEWAY:', process.env.ALIPAY_GATEWAY);
console.log('');

// 检查支付工具配置
console.log('2️⃣ 检查支付工具配置:');
console.log('   AppID:', payment.ALIPAY_CONFIG.appId || '❌ 未配置');
console.log('   Private Key:', payment.ALIPAY_CONFIG.privateKey ?
  `✅ 已配置 (长度: ${payment.ALIPAY_CONFIG.privateKey.length})` : '❌ 未配置');
console.log('   Gateway:', payment.ALIPAY_CONFIG.gateway);
console.log('   Sandbox:', payment.ALIPAY_CONFIG.isSandbox ? '✅ 已启用' : '❌ 未启用');
console.log('');

// 测试签名生成
console.log('3️⃣ 测试支付订单创建:');
(async () => {
  try {
    // 验证私钥格式
    const privateKey = payment.ALIPAY_CONFIG.privateKey;
    if (privateKey.includes('BEGIN RSA PRIVATE KEY') && privateKey.includes('END RSA PRIVATE KEY')) {
      console.log('   ✅ 私钥格式正确');
    } else {
      console.log('   ⚠️  私钥格式可能不正确（缺少BEGIN/END标记）');
    }

    // 直接测试创建支付订单
    const result = await payment.createAlipayPayment({
      orderId: 'TEST',
      description: '测试订单',
      amount: 1.00
    });

    console.log('   ✅ 支付订单创建成功');
    console.log('   商户订单号:', result.outTradeNo);
    console.log('   支付URL长度:', result.paymentUrl.length);
    console.log('   支付URL预览:', result.paymentUrl.substring(0, 150) + '...');
    console.log('');
    console.log('   💡 如果支付URL可以生成，说明签名是正确的');
    console.log('   💡 502错误更可能是支付宝服务器端的问题');
  } catch (error) {
    console.log('   ❌ 支付订单创建失败:', error.message);
    console.log('   错误详情:', error.stack);
  }
})();

console.log('\n📋 建议:');
console.log('   1. 如果签名生成失败，检查私钥格式');
console.log('   2. 确认私钥中的换行符使用 \\n 表示');
console.log('   3. 在支付宝沙箱中验证应用配置是否正确');
console.log('   4. 查看浏览器Network标签中的完整错误响应');

